/*
 * Fichier: Typographie.java
 * Crée le: 22 mars 2012.
 * Modifié: 22 mars 2012.
 * Auteurs: Sébastien ESTIENNE.
 * SiteWeb: http://www.prog-info.org/
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */
package chapitre13;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import javax.swing.Timer;

/**
 * 
 * @author Sébastien ESTIENNE.
 */
public class Typographie extends JFrame {

    /** <p>Serial version UID.</p> */
    private static final long serialVersionUID = 1L;
    
    JProgressBar progression = null;
    Timer timer = null;
    JButton demarrer = null;
    JLabel message = null;
    JTextField saisie;
    private static final String MSG = 
            "Ceci est un exercice de typographie, le but est de saisir le " +
    		"maximum de caractères en 10 secondes sans faire aucune erreur.";
    
    private static final String MSG_LABEL = "<html>Saisir le message suivant :<br>" + 
            "Ceci est un exercice de typographie, le but est de saisir le <br>" +
            "maximum de caractères en 10 secondes sans faire aucune erreur." + 
            "</html>";
    
    public Typographie() {
        super("Typographie");
        
        progression = new JProgressBar(0, 10);
        timer = new Timer(1000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                progression.setValue(progression.getValue() + 1);
                if(progression.getValue() >= progression.getMaximum()) {
                    timer.stop();
                    saisie.setEditable(false);
                    demarrer.setEnabled(true);
                    int score = 0;
                    for(int i = 0; i < MSG.length() && i < saisie.getText().length(); i++) {
                        if(MSG.charAt(i) == saisie.getText().charAt(i)) {
                            score = score + 1;
                        }
                        else {
                            break;
                        }
                    }
                    double perf = score / 10.0;
                    JOptionPane.showMessageDialog(Typographie.this, 
                            "Votre indice de performance est de " + perf + " lettres par seconde.", 
                            "Score", JOptionPane.INFORMATION_MESSAGE);
                }
            }
        });
        
        message = new JLabel(MSG_LABEL);
        saisie = new JTextField();
        saisie.setEditable(false);
        saisie.setColumns(30);
//        JPanel panneau = new JPanel();
//        panneau.setLayout(new FlowLayout());
//        panneau.add(message);
//        panneau.add(saisie);
        
        demarrer = new JButton("Démarrer");
        demarrer.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                progression.setValue(0);
                demarrer.setEnabled(false);
                saisie.setText("");
                saisie.setEditable(true);
                saisie.requestFocus();
                timer.start();
            }
        });
        
        // TODO améliorer l'affichage
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(message, BorderLayout.NORTH);
        JPanel panneauC = new JPanel();
        panneauC.setLayout(new FlowLayout());
        panneauC.add(saisie);
        getContentPane().add(panneauC, BorderLayout.CENTER);
        JPanel panneau = new JPanel();
        panneau.setLayout(new FlowLayout());
        panneau.add(demarrer);
        panneau.add(progression);
        getContentPane().add(panneau, BorderLayout.SOUTH);
        
        // Propriétés de la fenêtre.
        setLocation(50, 50);
        setSize(420, 150);
        setVisible(true);
        setResizable(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    /**
     * <p>Débute l'exécution du programme.</p>
     * @param args Les paramètres de la ligne de commande.
     */
    public static void main(String[] args)
    {
        new Typographie();
    }
}
